package com.javaclimb.accounting.dao;

import com.javaclimb.accounting.po.Trade;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.concurrent.TimeoutException;

/**
 * @author xiaoming
 * @version jdk1.8
 * @date 2022/12/27 12:34
 * @function:
 */
@Repository
public interface TradeDao{
    /**
     * 根据用户名查询是否设置支付密码
     */
    String getUserPay(String userName);
    /**
     *设置支付密码
     */
    int insertPayPass(String userPay, String userName);

    /**
     *验证支付密码是否正确
     */
    int verifyUserPay(String userName, String userPay);

    /**
     * 修改支付密码
     */
    int updateUserPay(String userName, String userPay);

    /**
     *
     * 根据电子账户accId查询电子账户余额
     * @param accId 电子账户id
     */
    BigDecimal getAccTempById(Long accId);

    /**
     * 根据银行卡号查询银行卡余额
     * @param cardNumber 银行卡号
     * @return
     */
    BigDecimal getCardMoney(String cardNumber);

    /**
     * 提现扣减电子账户金额
     * @param money 提现金额
     * @param userAccId 电子账户Id
     * @param accTemp 电子账户余额
     */
    void withdrawal(BigDecimal money, Long userAccId, BigDecimal accTemp);

    /**
     * 提现增加银行卡金额
     * @param money 提现金额
     * @param cardNumber 银行卡号
     * @param cardMoney 银行卡余额
     */
    void withdrawalCard(BigDecimal money, String cardNumber, BigDecimal cardMoney);

    /**
     * 提现后在trade表中添加记录
     * @param onCardId 银行卡id
     * @param onAccId 电子账户id
     * @param onMoney  交易金额
     * @param onBalance 账户余额
     * @return
     */
     void addTradeDrawal(Long onCardId, Long onAccId, BigDecimal onMoney, BigDecimal onBalance);
    /**
     * 充值 ysy
     */
    //查询银行卡余额
    BigDecimal selectCardMoney(String cardNumber);

    //扣除用户绑定银行卡余额
    int reduceCardMoney(String cardNumber, BigDecimal onMoney) throws Exception;

    //增加用户虚拟账户余额
    int AddAccTemp(Long userAccId, BigDecimal onMoney) throws Exception;


    //根据电子账户id去查电子账户余额
    BigDecimal selectOnBalance(Long userAccId);

    //往充值提现表中插入数据
    //  int addTrade(int onCardId, int onAccId, String onType, BigDecimal onMoney, Date onTime);
    int addTrade(Trade trade)throws Exception;

    //根据银行卡号码查询银行卡id
    Long selectCardIdByCardNumber(String cardNumber);
}
